package com.yyge.common.aspect;

import com.yyge.common.annotation.AdminAcces;
import com.yyge.common.enums.AckCode;
import com.yyge.common.exception.ServiceException;
import com.yyge.common.util.TokenUtil;
import com.yyge.common.vo.LoginVO;
import com.yyge.controller.admin.login.resp.AdminLoginResp;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.yyge.common.util.WaimaiThreadLocal;

/**
 * 通过AOP和自定义注解进行权限管理
 */
@Aspect
@Component
public class AdminAspect {

    @Autowired
    private TokenUtil tokenUtil;

    @Before("@annotation(acces)")
    public void checkAdmin(AdminAcces acces){
        AdminLoginResp vo=WaimaiThreadLocal.loginVOThreadLocal.get();
        if(vo == null /*令牌过期*/ ){
            throw new ServiceException(AckCode.APPLE_EXPIRED);
        }

        if(vo.getType() != vo.ACCOUNT_TYPE_ADMIN /*判断是否是管理员*/ ){
            throw new ServiceException(AckCode.SYSTEM_NEED_TKOKEN);
        }

        /*限制特定的访问*/
        String value= acces.value();
        System.out.println(vo.getName());
        System.out.println(value);

        if(!value.isEmpty()/*value不为空*/ && !value.equalsIgnoreCase(vo.getName())){
            throw new ServiceException(AckCode.SYSTEM_NEED_TKOKEN,"只有管理员 "+value+" 才能访问");
        }
    }

}
